#include"mystdio.h"
#include<string.h>
static MyFile* BuyFile(int fd ,int flag)
{
	MyFile *f = (MyFile*)malloc(sizeof(MyFile));
	if(f == NULL) return NULL;
	f->bufferlen= 0;
	f->fileno = fd;
	f->flag =flag;
	f->flush_method=LINE_FLUSH;
	memset(f->outbuffer,0,sizeof(f->outbuffer));
	return f;
}
MyFile*MyFopen(const char *path,const char * mode)
{
	int fd =-1;
	int flag =0;
	if(strcmp(mode,"w") == 0)
	{
		flag = O_CREAT | O_WRONLY | O_TRUNC;
		fd = open(path,flag,0666);
	}
	else if(strcmp(mode,"r") == 0)
	{
		flag = O_CREAT | O_RDONLY | O_TRUNC;
		fd = open(path,flag,0666);
	}
	else if(strcmp(mode,"a") == 0)
	{
		flag = O_CREAT | O_WRONLY | O_APPEND;
		fd= open(path,flag,0666);
	}
	else
	{
		//TODO
	}
	if(fd < 0) return NULL;

	return BuyFile(fd,flag);

}
int MyFwrite(MyFile* file,void *str,int len)
{
	memcpy(file->outbuffer+file->bufferlen,str, len);
	file->bufferlen+=len;
	if((file->flush_method & LINE_FLUSH)&& file->outbuffer[file->bufferlen-1]=='\n')
	{
		Myfflush(file);
	}
	return 0;
}
void Myfflush(MyFile*file)
{
	int n = write(file->fileno,file->outbuffer,file->bufferlen);
	(void)n;
	file->bufferlen=0;
}
void MyFclose(MyFile* file)
{
	if(file->fileno <0) return;
	Myfflush(file);
	close(file->fileno);
	free(file);

}